﻿// ****************************************************************************'
//  프로그램 : 
//  설    명 : 
//  작성일자 : 2013-05-03
//  작성  자 : Jaeyong Park
//  특이사항 : 
//  수정내용 : 
// ****************************************************************************'

#region Using

using System;
using System.Drawing;
using System.Windows.Forms;

#endregion

namespace FormPrint
{
	public static class StaticFn
	{
		/// <summary>
		/// Form 캡쳐
		/// </summary>
		/// <param name="frm"></param>
		/// <returns></returns>
		public static Image CaptureForm(Form frm)
		{
			bool flagMaximize = frm.WindowState == FormWindowState.Maximized;

			// Size 와 CliendSize 차이(좌,우,하단 Border 의 크기)
			int border = (frm.Width - frm.ClientSize.Width) / 2;

			// 최대화 상태일 때는 테두리 너비만큼 뺌.
			Bitmap rtn = new Bitmap(frm.Width - (flagMaximize ? (border * 2) : 0), frm.Height - (flagMaximize ? (border * 2) : 0));

			Graphics g = Graphics.FromImage(rtn);

			// 최대화 상태일 때는 테두리 너비위치 변경
			g.CopyFromScreen(new Point(frm.DesktopLocation.X + (flagMaximize ? border : 0), frm.DesktopLocation.Y + (flagMaximize ? border : 0)), Point.Empty, rtn.Size);

			return rtn;
		}

		/// <summary>
		/// 원본크기에서 가로, 세로 비율을 유지한 채 대상에 들어갈 만큼 최소 사이즈를 리턴
		/// </summary>
		/// <param name="src">원본 사이즈</param>
		/// <param name="dest">대상 사이즈</param>
		/// <returns></returns>
		public static Size GetPreferSize(Size src, Size dest)
		{
			// 원본이 대상보다 작은 경우 원본 크기로 리턴
			if(src.Width < dest.Width && src.Height < dest.Height)
			{
				return src;
			}

			int sourceWidth = src.Width;
			int sourceHeight = src.Height;

			float nPercent = 0;
			float nPercentW = 0;
			float nPercentH = 0;

			nPercentW = ((float)dest.Width / (float)sourceWidth);
			nPercentH = ((float)dest.Height / (float)sourceHeight);

			nPercent = Math.Min(nPercentH, nPercentW);

			return new Size((int)(sourceWidth * nPercent), (int)(sourceHeight * nPercent));
		}
	}
}